#define _CRT_SECURE_NO_WARNINGS 1

#include <iostream>
using namespace std;

//class Data
//{
//	friend ostream& operator<<(ostream& out, const Data& d) const;
//public:
//	Data(int year=1,int month=1,int day=1)
//		:_year(year)
//		,_month(month)
//		,_day(day)
//	{}
//	~Data()
//	{}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//
//ostream& operator<<(ostream& out, const Data& d)
//{
//	out << d._year << "-" << d._month << "-" << d._day << endl;
//	return out; 
//}
//
//int main()
//{
//	Data d1(2025, 7, 14);
//	cout << d1;
//	return 0;
//}

//class Data
//{
//public:
//	Data(int year = 1, int month = 1, int day = 1)
//		:_year(year)
//		, _month(month)
//		, _day(day)
//	{}
//
//	ostream& operator<<(ostream& out)
//	{
//		out << _year << "-" << _month << "-" << _day << endl;
//		return out;
//	}
//
//	~Data()
//	{}
//private:
//	int _year;
//	int _month;
//	int _day;
//};

//class Data
//{
//public:
//	Data(int year = 1, int month = 1, int day = 1)
//		:_year(year)
//		, _month(month)
//		, _day(day)
//	{
//	}
//
//	istream& operator>>(istream& in)
//	{
//		in >> _year >> _month >> _day;
//		return in;
//	}
//
//	ostream& operator<<(ostream& out)
//	{
//		out << _year << "-" << _month << "-" << _day << endl;
//		return out;
//	}
//
//	~Data()
//	{
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//
//int main()
//{
//	Data d1(2025, 7, 14);
//	d1 << cout;
//	d1 >> cin;
//	d1 << cout;
//	return 0;
//}

//class Data
//{
//	friend istream& operator>>(istream& in, Data& d);
//public:
//	Data(int year = 1, int month = 1, int day = 1)
//		:_year(year)
//		, _month(month)
//		, _day(day)
//	{
//	}
//
//	ostream& operator<<(ostream& out)
//	{
//		out << _year << "-" << _month << "-" << _day << endl;
//		return out;
//	}
//
//	~Data()
//	{
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//
//istream& operator>>(istream& in, Data& d)
//{
//	in >> d._year >> d._month >> d._day;
//	return in;
//}
//
//int main()
//{
//	Data d1(2025, 7, 14);
//	d1 << cout;
//	cin >> d1;
//	d1 << cout;
//	return 0;
//}

//class A
//{
//	friend class B;
//public:
//	A(int a = 1)
//		:_a(a)
//	{}
//private:
//	int _a;
//};
//
//class B
//{
//public:
//	B(int b = 2)
//		:_b(b)
//	{}
//	int Add()
//	{
//		return _aa._a + _b;
//	}
//private:
//	int _b;
//	A _aa;
//};
//
//int main()
//{
//	B b1;
//	int ret = b1.Add();
//	return 0;
//}

class A
{
	friend class B;
public:
	A(int a = 1)
		:_a(a)
	{
	}

	class B
	{
	public:
		B(A& a, int b = 2)
			:_b(b)
			,_aa(a)
		{
		}
		int Add()
		{
			return _aa._a + _b;
		}
	private:
		A& _aa;
		int _b;
	};

private:
	int _a;
};

int main()
{
	A a;
	A::B b1(a);
	int ret = b1.Add();
	return 0;
}

